//析构的各种形式
{
    let a, b, rest;
    [a, b] = [1, 2];
    // console.log(a, b);
}

{
    let a, b, rest;
    [a, b, ...rest] = [1, 2, 3, 4, 5, 6];
    // console.log(a, b, rest); // 输出: 1 2 [3, 4, 5, 6]
}

{
    let a, b;
    ({ a, b } = { a: 1, b: 2 })
    // console.log(a, b);
}

{
    let a, b, c, rest;
    [a, b, c = 3] = [1, 2];
    // console.log(a, b, c);
}

{
    let a = 1;
    let b = 2;
    [a, b] = [b, a];
    // console.log(a, b);
}
console.log("----------------------------------------------")

/**
 * 函数析构
 */
{
    function f() {
        return [1, 2]
    }
    let a, b;
    [a, b] = f();
    console.log(a, b);
}

{
    function f() {
        return [1, 2, 3, 4, 5]
    }
    let a, b;
    [a, , , b] = f();
    console.log(a, b);
}

{
    function f() {
        return [1, 2, 3, 4, 5]
    }
    let a, b, c;
    [a, , ...b] = f();
    console.log(a, b); //输出: 1 [3, 4, 5]
}

console.log("----------------------------------------------")

/**
 * 对象析构
 */
{
    let o = { p: 42, q: true };
    let { p, q } = o;
    console.log(p, q);
}

{
    let { a = 10, b = 5 } = { a: 3 };
    console.log(a, b);
}

{
    let metaData = {
        title: 'abc',
        test: [{
            title: 'test',
            desc: 'description'
        }]
    }
    let { title: esTitle, test: [{ title: cnTitle }] } = metaData; // 结构必须一一对应
    console.log(esTitle, cnTitle);
}
